对转置卷积、可变形卷积、通道加权卷积的通俗理解(下篇)
python进阶教程
机器学习
深度学习
长按二维码关注
进入正文
声明:卷积神经网络经过这些年的发展已经非常成熟,有着非常繁多的网络类型,其核心机制都在于“卷积核”的设计,现在涌现出了非常多的卷积思想,在各个领域各领风骚,比如深度可分离卷积、分组卷积、空洞(扩张)卷积、转置(反)卷积、可变性卷积、通道加权卷积等。这里只介绍这六种,限于篇幅,将分为两篇系列文章进行说明,本篇为下篇,介绍后三个。
文章较长,阅读全文约20min。
目录
四 转置(反)卷积
Transposed Convolution/Deconcolution
4.1 转置卷积
4.2 转置卷积和反卷积的区别
4.3 转置卷积的应用领域
4.4 转置卷积的动态图
4.5 例子
五 可变形卷积
六 通道加权卷积
七 关于卷积的思考
04
转置(反)卷积
转置卷积(transposed Convolutions)又名反卷积(deconvolution)或是分数步长卷积(fractially straced convolutions)。反卷积(Transposed Convolution, Fractionally Strided Convolution or Deconvolution)的概念第一次出现是Zeiler在2010年发表的论文Deconvolutional networks中。
那究竟什么是“反卷积”呢?深度学习中的deconv,是一种上采样upsample过程,他可以还原原图像的大小形状,但是不能够完全恢复原来的像素值,因此他并不是严格的逆运算。
1. CNN可视化,通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的;
2. FCN全卷积网络中,由于要对图像进行像素级的分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用反卷积;
3. GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要反卷积操作。
(1)以3x3,no padding , strides=1为例
卷积(convolution)过程:
卷积核为:3x3; no padding , strides=1
注意:上面的过程中,下方的“蓝色”表示输入;上方的“绿色”表示输出。可以看出,反卷积过程恢复了原来的图像的大小,即Shape。
(2)以3x3,no padding , strides=2为例
卷积过程:反卷积:
(3)卷积过程与反卷积过程的动态展示过程
卷积过程:
反卷积过程:
注意图中蓝色(下面)是输入,绿色(上面)是输出,卷积和反卷积在 p、s、k p、s、k 等参数一样时,是相当于输入和 输出 调了个位。
这里说明了反卷积的时候,是有补0的,即使人家管这叫no padding( padding=0 )。
假设一个卷积操作,它的输入是 4x4,卷积核大小是 3x3,步长为 1x1,填充方式为 Valid 的情况下,输出则为 2x2,如下图所示:
我们将其从左往右,从上往下以的方式展开,
输入矩阵可以展开成维数为 [16, 1] 的矩阵,记作 x
输出矩阵可以展开成维数为 [4, 1] 的矩阵,记作 y
y要想完成[16,1]到[4,1]的映射,卷积核可以表示为 [4, 16] 的矩阵,记作 C,其中非 0 的值表示卷积对应的第 i 行 j 列的权重。
所以卷积可以用 y = C * x ([4, 1] = [4, 16] * [16, 1])来表示
总结:卷积过程为:
y=C*x
那么,转置卷积就可以理解为是
x=CT*y
05
可变形卷积
卷积核形状一定是矩形吗?-- Deformable convolution 可变形卷积核
传统的卷积核一般都是长方形或正方形,但MSRA提出了一个相当反直觉的见解,认为卷积核的形状可以是变化的,变形的卷积核能让它只看感兴趣的图像区域 ,这样识别出来的特征更佳。可变形的卷积核,可以看成是视觉领域的新“视”界。
那么可变形的卷积核到底怎么实现呢?
其实它的实现依然是基于标准的卷积核的,只不过在标准卷积核中没一个卷积核单元还附带两个位置偏移量(x,y),x,y表示像素相对于中心像素的位置偏移,即现在每个像素的值是一个形如(value,x,y)的三元组,x,y为偏移量,但是具体的偏移量不是人为指定的,虽然也可以这么做,具体的偏移多少,每一个像素的偏移是不一样的,让网络去学习这个x,y。
06
通道加权卷积
通道间的特征都是平等的吗? -- SEnet
无论是在Inception、DenseNet或者ShuffleNet里面,我们对所有通道产生的特征都是不分权重直接结合的,那为什么要认为所有通道的特征对模型的作用就是相等的呢? 这是一个好问题,于是,ImageNet2017 冠军SEnet就出来了。
SEnet 结构
一组特征在上一层被输出,这时候分两条路线,第一条直接通过,第二条首先进行Squeeze操作(Global Average Pooling),把每个通道2维的特征压缩成一个1维,从而得到一个特征通道向量(每个数字代表对应通道的特征)。然后进行Excitation操作,把这一列特征通道向量输入两个全连接层和sigmoid,建模出特征通道间的相关性,得到的输出其实就是每个通道对应的权重,把这些权重通过Scale乘法通道加权到原来的特征上(第一条路),这样就完成了特征通道的权重分配。
07
总结思考
现在越来越多的CNN模型从巨型网络到轻量化网络一步步演变,模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的trade off,都希望模型又快又准。因此从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,到目前能移植到移动端的mobilenet、ShuffleNet(体积能降低到0.5mb!),我们可以看到这样一些趋势:
卷积核方面:
大卷积核用多个小卷积核代替;
单一尺寸卷积核用多尺寸卷积核代替;
固定形状卷积核趋于使用可变形卷积核;
使用1×1卷积核(bottleneck结构)。
卷积层通道方面:
标准卷积用depthwise卷积代替;
使用分组卷积;
分组卷积前使用channel shuffle;
通道加权计算。
卷积层连接方面:
使用skip connection,让模型更深;
densely connection,使每一层都融合上其它层的特征输出(DenseNet)
启发
类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise的结合会不会成为以后降低参数量的标准配置?
推 荐 阅 读
对深度可分离卷积、分组卷积、空洞卷积的通俗理解(上篇)
python协程系列(六)——asyncio+tkinter开发无阻塞程序以及timer的模拟
python协程系列(五)——asyncio的核心概念与基本架构
赶紧关注我们吧
您的点赞和分享是我们进步的动力!
↘↘↘